import request from '@/utils/request'

// ==================== 接口类型定义 ====================

/**
 * 用户详细信息接口
 */
export interface UserProfile {
  user_id: number
  username: string
  email: string
  mobile: string
  gender: number
  avatar: string // 新增字段
  avatar_url: string
  birthday: string
  status: number
  last_login_time: string
  is_staff: boolean
  is_active: boolean
  date_joined: string
}

/**
 * 更新用户信息参数接口
 */
export interface UpdateUserProfileParams {
  username?: string
  email?: string
  mobile?: string
  gender?: number
  avatar?: string
  avatar_url?: string
  birthday?: string
}

// ==================== API 服务 ====================

/**
 * 用户API服务
 */
export const userApi = {
  /**
   * 获取用户详细信息
   * GET /auth/info/
   */
  getUserProfile(): Promise<UserProfile> {
    return request({
      url: '/auth/info/',
      method: 'get',
    })
  },

  /**
   * 更新用户信息
   * PUT /auth/info/
   * @param params - 用户信息参数
   */
  updateUserProfile(params: UpdateUserProfileParams): Promise<UserProfile> {
    return request({
      url: '/auth/info/',
      method: 'put',
      data: params,
    })
  },

  /**
   * 更新用户信息（支持文件上传）
   * PUT /auth/info/
   * @param data - 用户信息参数或FormData
   */
  updateUserProfileWithAvatar(data: UpdateUserProfileParams | FormData): Promise<UserProfile> {
    // 如果是FormData，设置正确的Content-Type
    if (data instanceof FormData) {
      return request({
        url: '/auth/info/',
        method: 'put',
        data: data,
        headers: {
          'Content-Type': 'multipart/form-data',
        },
      })
    } else {
      // 否则使用默认的JSON方式
      return request({
        url: '/auth/info/',
        method: 'put',
        data: data,
      })
    }
  },

  /**
   * 更新用户头像
   * POST /auth/avatar/
   * @param formData - 包含头像文件的表单数据
   */
  updateAvatar(formData: FormData): Promise<{ avatar_url: string }> {
    return request({
      url: '/auth/avatar/',
      method: 'post',
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    })
  },
}

// ==================== 工具函数 ====================

/**
 * 获取性别文本
 */
export const getGenderText = (gender: number): string => {
  switch (gender) {
    case 0:
      return '未知'
    case 1:
      return '男'
    case 2:
      return '女'
    default:
      return '未知'
  }
}

/**
 * 格式化日期时间
 */
export const formatDateTime = (dateString: string): string => {
  const date = new Date(dateString)
  return date.toLocaleDateString('zh-CN', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
  })
}

// ==================== 默认导出 ====================

export default userApi
